// import 'package:flutter/material.dart';
// import 'package:flutter_widget/custom/custom_appbar.dart';
//
// class ListviewSeparated extends StatefulWidget {
//   String name;
//   ListviewSeparated({Key? key, required this.name}) : super(key: key);
//
//   @override
//   State<ListviewSeparated> createState() => _ListviewSeparatedState();
// }
//
//
//
// class _ListviewSeparatedState extends State<ListviewSeparated> {
//
//   ScrollController  _scrollController= new  ScrollController();
//
//   List list = []; //列表要展示的数据
//
//   @override
//
//   void initState() {
//
//     // TODO: implement initState
//
//     super.initState();
//
//     getData();
//
//   }
//
//   /**
//
//    * 初始化list数据 加延时模仿网络请求
//
//    */
//
//   Future getData() async {
//
//     await Future.delayed(Duration(seconds: 2), () {
//
//       setState(() {
//
//         list = List.generate(15, (i) => '哈喽,我是原始数据 $i');
//
//       });
//
//     });
//
//   }
//
//   @override
//
//   Widget build(BuildContext context) {
//
//     return new Scaffold(
//
//       appBar: CustomAppbar(widget.name, Theme.of(context).primaryColor),
//
//       body: Padding(
//         padding: const EdgeInsets.symmetric(horizontal: 16.0),
//         child: RefreshIndicator(
//
//           onRefresh: _onRefresh,
//
//           child: ListView.separated(
//             controller: _scrollController,
//             itemBuilder: _renderRow,
//
//             itemCount: list.length,
//             separatorBuilder: _renderDivider,
//
//           ),
//
//         ),
//       ),
//
//     );
//
//   }
//
//   Widget _renderRow(BuildContext context, int index) {
//
//     return ListTile(
//
//       title: Text(list[index]),
//
//     );
//
//   }
//
//   Widget _renderDivider(BuildContext context, int index) {
//
//     return Divider();
//
//   }
//
//   /**
//
//    * 下拉刷新方法,为list重新赋值
//
//    */
//
//   Future<Null> _onRefresh() async {
//
//     await Future.delayed(Duration(seconds: 3), () {
//
//       print('refresh');
//
//       setState(() {
//
//         list = List.generate(20, (i) => '哈喽,我是新刷新的 $i');
//
//       });
//
//     });
//
//   }
//
// }


import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter_widget/custom/custom_appbar.dart';


class ListviewSeparated extends StatefulWidget {
  String name;
  ListviewSeparated({Key? key, required this.name}) : super(key: key);

  @override
  State<ListviewSeparated> createState() => _ListviewSeparatedState();
}


class _ListviewSeparatedState extends State<ListviewSeparated> {
  // 当前页数
  int  _page = 1;
  // 页面数据
  List _list = [];
  // 是否还有
  bool _hasMore = true;
  // 滚动控制器
  ScrollController _scrollController = new ScrollController();
  @override
  void initState() {
    super.initState();
    this._getData();
    // 监听滚动事件
    _scrollController.addListener((){
      // 获取滚动条下拉的距离
      // print(_scrollController.position.pixels);
      // 获取整个页面的高度
      // print(_scrollController.position.maxScrollExtent);
      if(_scrollController.position.pixels>_scrollController.position.maxScrollExtent-40){
        this._getData();
      }
    });
  }

  // 获取数据列表
  void _getData() async{
    if(this._hasMore){

      var url = "http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=${_page}";
      Response result = await Dio().get(url);
      var list = json.decode(result.data)["result"];

      setState(() {
        // 拼接数据
        this._list.addAll(list);
        // 页数累加
        this._page++;
      });

      if(list.length<20){
        setState(() {
          // 关闭加载
          this._hasMore = false;
        });
      }
    }
  }

  // 下拉刷新
  Future<void> _onRefresh() async{
    print("下拉刷新");
    // 持续两秒
    await Future.delayed(Duration(milliseconds:2000),(){
      this._getData();
    });
  }


  // 加载动画
  Widget _getMoreWidget() {

    // 如果还有数据
    if(this._hasMore){
      return Center(
        child: Padding(
          padding: EdgeInsets.all(10.0),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Text(
                '加载中',
                style: TextStyle(fontSize: 16.0),
              ),
              // 加载图标
              CircularProgressIndicator(
                strokeWidth: 1.0,
              )
            ],
          ),
        ),
      );
    }else{
      return Center(
        child: Text("...我是有底线的..."),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
        child:Scaffold(
            appBar: CustomAppbar(widget.name, Theme.of(context).primaryColor),
            body:this._list.length==0?this._getMoreWidget():RefreshIndicator(
                child: ListView.builder(
                  // 上拉加载控制器
                  controller: _scrollController,
                  itemCount: this._list.length,
                  itemBuilder: (context,index){

                    Widget tip = Text("");
                    // 当渲染到最后一条数据时，加载动画提示
                    if(index == this._list.length-1){
                      tip = _getMoreWidget();
                    }
                    return Column(
                      children: <Widget>[
                        ListTile(
                            title:Text(
                              "${this._list[index]["title"]}",
                              maxLines:1,
                            )
                        ),
                        Divider(),
                        // 加载提示
                        tip
                      ],
                    );
                  },
                ),
                // 下拉刷新事件
                onRefresh:this._onRefresh
            )
        )
    );
  }
}